Current database technology generally relies on one of three main types: relational databases, object-oriented databases, or a combination of relational and object-oriented databases. Relational databases divide the world into tables, with columns defining data fields and rows defining data records. Relational databases then use relationships and set theory to model and manage real-world data. Object-oriented databases model the world in objects, in which data is encapsulated into objects and associated with methods and procedures. Object-relational databases are a combination of the previous two types.
All of these database constructs are primarily concerned with organizing data into predefined formats and structures. In order to represent the data, an object or a table must be defined with known data characteristics. For instance, before data can be stored in an object, the object must be defined to allow certain types of data, and the object must be pre-associated with relevant procedures. Alternatively, in the relational database construct, a table must be defined before any data can be stored in the table, with each column being defined to allow only certain amounts and types of data.
Unfortunately, this pre-defining of data is always done without a perfect knowledge of the real-world data being modeled. As a result, once the database is actually implemented, changes often must be made to the table definitions or objects so as to more accurately reflect the real-world data. These changes will typically require that the database be reconstructed according to the new definitions. In addition, even after an optimum definition of the real-word data is created, the existing database constructs are not flexible enough to handle unique situations that do not fit the optimum definition. Once this definition is created, along with the related data formats, relationships, and methods, the created structure cannot be easily modified to allow the representation of the unusual case.
What is needed is a database construct that is not as rigid as the existing models of relational and object-oriented databases. This preferred model would not require a pre-definition of the data, but would rather allow data to be entered as it is encountered. Associations between data elements could be developed on-the-fly, and new data could be added to the system even if the pre-existing model did not expect such data to exist.